//  布尔值
// var\let:定义变量
var flag = true;
flag = false;
// flag = 2 非布尔类型的语言，不能赋值给布尔类型
// 数字型
let num1 = 10;
let num2 = 0.5;
// 字符串
let str = "hello string";
// 模版字符串 ``反引号 ${}数据填充
let username = "张三";
let age = 20;
console.log(`我是${username},今年${age}岁`);
// undefined 和 null
let un = undefined;
let nu = null;
let num = undefined;
let str1 = null;
// undefined 和 null定的类型，只能赋值符合自己的类型，
// 但是undefined 和 null可以赋值给其他类型的变量
// 数组(必须符合规定的类型)
let arr1 = [1, 2, 3];
let str2 = ["hi", "hello"];
let arr2 = [4, 5, 6];
// 元组（各种类型不相同的元素）
let arr3 = [1, "hello"];
// 枚举 enum,就是给一组数值赋予一个好听的名字
// 默认情况下，枚举的编号从0开始，也可以手动修改
var Color;
(function (Color) {
    Color[Color["Red"] = 2] = "Red";
    Color[Color["Yellow"] = 3] = "Yellow";
    Color[Color["Blue"] = 4] = "Blue";
})(Color || (Color = {}));
let myColor = Color.Red;
console.log(myColor, Color.Yellow, Color.Blue);
// 取出枚举的对象,通过编号取值
let colorName = Color[2];
console.log(colorName);
// any 泛型：不清楚设置哪个类型，可以设置任何类型
let notType = 1;
notType = "hello";
notType = true;
let arr4 = [1, "hi", false];
// void 类型和any类型相反，表示没有任何类型
function test() {
    return 1;
}
function test98() {
    // return 1 //error
    // return null //ok
    // return undefined //ok
    console.log(111);
}
//object 类型 它是非原始类型,除了number,string,boolean之外的类型
let obj = undefined;
let obj2 = null;
let obj3 = [1, 2, 3];
let obj4 = { name: "张三" };
//联合类型：多种类型取一种类型
function test100(params) {
    return params + "typescript";
}
console.log(test100("hello"));
console.log(test100(123));
console.log(test100(true));
//类型断言：相当于类型转换
//第一种通过<数据类型>变量、参数
//第二种通过变量、参数 as 数据类型
//TS的类型断言只在编译阶段起作用，但对运行结果没有任何影响，不进行特殊的数据检查和解构
//相当于欺骗了TS的代码检查，是一个假的类型转换，只是为了不被报错，没有实际性的类型转换作用
function test4(params) {
    //取出传出去的参数的长度
    // 数据类型时没有长度length的属性
    if (params.length) {
        return params.length;
    }
    else {
        return params.toString().length;
    }
}
//  test4("hello")
console.log(test4(1234));
//类型推断
//定义变量第一次赋值是什么类型，那么就会默认推断出变量为该类型
let count = 123;
// count = "hello"
//定义变量第一次如果没有赋值，那么就会默认推断出变量为any类型（支持任何类型）
let a;
a = 1;
a = "hi";
a = true;
a = [1, 2];
